package zipStream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Demo3 {
    public static void main(String[] args) throws IOException {
        //压缩整个的文件夹
        //1.创建要压缩的文件的对象
        File src = new File("D:\\temp\\Jack");
        //2.要压缩到的位置 ,直接获取到要压缩的文件的父级目录即可
        File destParent = src.getParentFile();
        //3.创建压缩流关联包,就是压缩后的包
        File dest = new File(destParent,src.getName() + ".zip");
        //4.创建压缩流对象
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));
        //5.调用方法
        toZip(src,zos,src.getName());
        //6.释放资源
        zos.close();


    }
    public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {
        //1.进行到目标文件获取到所有文件
        File[] files = src.listFiles();
        //2.遍历
        for (File file : files) {
            //2.1判断
            if(file.isFile()){
                //是文件进行直接压缩
                ZipEntry entry = new ZipEntry(name + "\\" + file.getName());
                zos.putNextEntry(entry);
                //读取数据,进行写入
                FileInputStream fis  =new FileInputStream(file);
                int b;
                while((b = fis.read()) != -1){
                    zos.write(b);
                }
                fis.close();
                zos.closeEntry();
            } else {
                //是文件夹进行递归调用
                toZip(file,zos,name + "\\" + file.getName());
            }

        }
    }


}
